#!/bin/bash
# 参数处理-Shell传入参数的处理
# 1. $# 传递到脚本的参数个数
# 2. $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同，此选项参数可超过9个
# 3. $? 脚本运行的当前进程ID号 
# 4. $! 后台运行的最后一个进程的进程ID号 
# 5. $@ 与$#相同，但是使用时加引号，并在引号中返回每个参数 
# 6. $- 显示shell使用的当前选项，与set命令功能相同 
# 7. $? 显示最后命令的退出状态。0表示没有错误，其他任何值表明有错误。 
# 变量含义  
# $0 脚本名字  $1 位置参数 
# $- 传递到脚本中的标志(使用set) 
# $_ 之前命令的最后一个参数 
# $! 运行在后台的最后一个作业的进程ID(PID)
source ${HOME}/.bashrc
if [ $# -eq 0 ]; then
    exit 0
fi
name=$1
tomcat=$2

mkdir -p ${HOME}/watchdog
suc_log="${HOME}/watchdog/success.log"
fai_log="${HOME}/watchdog/${name}-faild.log"
heap_log="${HOME}/watchdog/${name}.log"
cur_dir=`dirname $0`


f_n="${HOME}/watchdog/`date "+%Y_%m_%d-%H-%M-%S"`.log"
chks=`ps -ef|grep "node"|grep "${tomcat}"|grep -v "grep"| awk '{print $2}'`
if [ -n "${chks}" ];then
    #/usr/java/latest/bin/jmap -heap ${chks} > ${heap_log} 
    tdc=`netstat -nat|grep 6881 |wc -l`
    if [ ${tdc} -gt 40 ];then
        kill -9 ${chks} 
        cd $cur_dir
        sleep 10s
        ./server.sh >>${fai_log} 2>&1
         echo "`date "+%Y_%m_%d %H:%M:%S"` nodejs ${name} pid=${chks} is running, to many tcp connections, restart it !" >> ${suc_log}
    else
        tdc=`pstree -p ${chks} |wc -l`
        echo "`date "+%Y_%m_%d %H:%M:%S"` tomcat ${name} pid=${chks} is running, and thread count is ${tdc}" >> ${suc_log}
    fi
    exit 0
else
    echo "`date "+%Y_%m_%d %H:%M:%S"` tomcat ${name} is not running,prepare starting ..." >> ${suc_log}
    #mv ${heap_log} ${f_n}
    cd $cur_dir
    ./server.sh >>${fai_log} 2>&1
    echo "`date "+%Y_%m_%d %H:%M:%S"` started tomcat ${name} ......" >> ${suc_log}
fi
